# wxPython doesn't (as of Dec. 2022) provide type hints in a format that mypy can use.
# However, this is the one library that we need to type-check the most - passing the wrong
# types (for example, passing floats when ints are expected) can cause all kinds of hard to
# debug rendering bugs. So, this file provides stub definitions for all of the wxPython
# classes, functions, and values that we use in Argos.

from __future__ import annotations
from types import TracebackType
from typing import Any, Callable, Iterator, List, Optional, Sequence, Tuple, Type, Union, overload

class Object: ...

class Trackable: ...

class EvtHandler(Object, Trackable):
    def Bind(self,
             event: PyEventBinder,
             handler: Callable,
             source: Optional[Object] = None,
             id: int = ID_ANY,
             id2: int = ID_ANY) -> None: ...

class EventFilter: ...
class AppConsole(EvtHandler, EventFilter): ...

class App(AppConsole):
    def __init__(self,
                 redirect: bool = False,
                 filename: Optional[str] = None,
                 useBestVisual: bool = False,
                 clearSigInt: bool = True) -> None: ...
    def MainLoop(self) -> None: ...

def NewId() -> int: ...

BOTH: int
HORIZONTAL: int
VERTICAL: int
CENTRE: int
ALIGN_CENTER: int
ALIGN_CENTER_HORIZONTAL: int
ALIGN_CENTER_VERTICAL: int
ALIGN_BOTTOM: int
ALIGN_LEFT: int
ALIGN_RIGHT: int
ALIGN_TOP: int
BOTTOM: int
LEFT: int
RIGHT: int
TOP: int
ALL: int
EXPAND: int
ID_ANY: int
ID_NONE: int
ID_CANCEL: int
ID_OK: int
ID_FIND: int
ID_EXIT: int
ID_DELETE: int
ID_SAVE: int
ID_BACKWARD: int
ID_NO: int
DEFAULT_DIALOG_STYLE: int
MAXIMIZE_BOX: int
BORDER_NONE: int
BORDER_SIMPLE: int
BORDER_SUNKEN: int
RESIZE_BORDER: int
SUNKEN_BORDER: int
CAPTION: int
CLOSE_BOX: int
CLIP_CHILDREN: int
STAY_ON_TOP: int
SYSTEM_MENU: int
TAB_TRAVERSAL: int
NO_FULL_REPAINT_ON_RESIZE: int
SHAPED: int

OK: int
CANCEL: int
YES_NO: int
YES_DEFAULT: int
ICON_QUESTION: int

wxEVT_NULL: int

class PyEventBinder:
    @property
    def typeId(self) -> int: ...

EVT_BUTTON: PyEventBinder
EVT_SPINCTRL: PyEventBinder
EVT_CLOSE: PyEventBinder
EVT_MENU: PyEventBinder
EVT_TEXT: PyEventBinder
EVT_TEXT_ENTER: PyEventBinder
EVT_LIST_ITEM_ACTIVATED: PyEventBinder
EVT_LIST_ITEM_RIGHT_CLICK: PyEventBinder
EVT_KEY_UP: PyEventBinder
EVT_KEY_DOWN: PyEventBinder
EVT_LEFT_DOWN: PyEventBinder
EVT_CHECKBOX: PyEventBinder
EVT_ENTER_WINDOW: PyEventBinder
EVT_SET_FOCUS: PyEventBinder
EVT_SIZE: PyEventBinder
EVT_TIMER: PyEventBinder
EVT_MOTION: PyEventBinder
EVT_CHOICE: PyEventBinder
EVT_KILL_FOCUS: PyEventBinder
EVT_TREE_ITEM_EXPANDING: PyEventBinder
EVT_TREE_ITEM_EXPANDED: PyEventBinder
EVT_TREE_SEL_CHANGED: PyEventBinder
EVT_TREE_KEY_DOWN: PyEventBinder
EVT_ERASE_BACKGROUND: PyEventBinder
EVT_PAINT: PyEventBinder
EVT_LEFT_DCLICK: PyEventBinder
EVT_LEFT_UP: PyEventBinder
EVT_RIGHT_DOWN: PyEventBinder
EVT_RIGHT_UP: PyEventBinder
EVT_MOUSEWHEEL: PyEventBinder
EVT_SCROLLWIN: PyEventBinder
EVT_RADIOBUTTON: PyEventBinder
EVT_ACTIVATE: PyEventBinder
EVT_CHILD_FOCUS: PyEventBinder
EVT_SLIDER: PyEventBinder
EVT_CHAR: PyEventBinder
EVT_COMBOBOX: PyEventBinder
EVT_TOOL: PyEventBinder

KeyCode = int
WXK_F5: KeyCode
WXK_UP: KeyCode
WXK_DOWN: KeyCode
WXK_RIGHT: KeyCode
WXK_LEFT: KeyCode
WXK_PAGEUP: KeyCode
WXK_PAGEDOWN: KeyCode
WXK_HOME: KeyCode
WXK_END: KeyCode
WXK_SHIFT: KeyCode
WXK_CONTROL: KeyCode
WXK_ESCAPE: KeyCode
WXK_RETURN: KeyCode
WXK_ENTER: KeyCode
WXK_DELETE: KeyCode

MOD_CONTROL: int

TIMER_CONTINUOUS: int

class Timer(EvtHandler):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, owner: EvtHandler, id: int = -1) -> None: ...
    def Start(self, milliseconds: int = -1, oneShot: int = TIMER_CONTINUOUS) -> bool: ...
    def Stop(self) -> None: ...
    def IsRunning(self) -> bool: ...

class Size:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, width: int, height: int) -> None: ...
    @overload
    def __getitem__(self, idx: int) -> int: ...
    @overload
    def __getitem__(self, idx: slice) -> Sequence[int]: ...
    def __iter__(self) -> Iterator[int]: ...
    def GetWidth(self) -> int: ...
    def GetHeight(self) -> int: ...
    def Get(self) -> Tuple[int, int]: ...

SizeUnion = Union[Tuple[int, int], Size]

class Event:
    def GetId(self) -> int: ...
    def Skip(self, skip: bool = True) -> None: ...
    def GetEventObject(self) -> Object: ...

class PaintEvent(Event): ...

class CommandEvent(Event):
    def GetString(self) -> str: ...

class PyCommandEvent:
    def __init__(self, eventType: int = wxEVT_NULL, id: int = 0) -> None: ...

class NotifyEvent(CommandEvent): ...

class MenuEvent(Event): ...

class FocusEvent(Event):
    def GetWindow(self) -> Window: ...

class TimerEvent(Event): ...

class SizeEvent(Event): ...

class ActivateEvent(Event): ...

class ScrollEvent(CommandEvent): ...

class KeyboardState:
    def AltDown(self) -> bool: ...
    def ControlDown(self) -> bool: ...
    def ShiftDown(self) -> bool: ...
    def GetModifiers(self) -> int: ...

class KeyEvent(Event, KeyboardState):
    def GetKeyCode(self) -> int: ...

class MouseState(KeyboardState):
    def GetPosition(self) -> Point: ...
    def LeftIsDown(self) -> bool: ...

class MouseEvent(Event, MouseState):
    def GetWheelDelta(self) -> int: ...
    def GetWheelRotation(self) -> int: ...

ALPHA_OPAQUE: int

class Colour:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, red: int, green: int, blue: int, alpha: int = ALPHA_OPAQUE) -> None: ...
    @overload
    def __init__(self, colRGB: int) -> None: ...
    @overload
    def __init__(self, colour: Colour) -> None: ...
    def Get(self, includeAlpha: bool = True) -> Tuple[int, ...]: ...
    @overload
    def Set(self, red: int, green: int, blue: int, alpha: int = ALPHA_OPAQUE) -> None: ...
    @overload
    def Set(self, rgb: int) -> None: ...
    @overload
    def Set(self, str: str) -> bool: ...
    @overload
    def ChangeLightness(self, ialpha: int) -> Colour: ...
    @overload
    def ChangeLightness(self, r: int, g: int, b: int, ialpha: int) -> Tuple[int, int, int]: ...

BLACK: Colour
WHITE: Colour
RED: Colour

ColourUnion = Union[Tuple[int, int, int], List[int], str, Colour]

ImageResizeQuality = int
IMAGE_QUALITY_NORMAL: ImageResizeQuality
IMAGE_QUALITY_HIGH: ImageResizeQuality

class StreamBase: ...
class InputStream(StreamBase): ...

IMAGE_OPTION_CUR_HOTSPOT_X: str
IMAGE_OPTION_CUR_HOTSPOT_Y: str

class Image(Object):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, width: int, height: int, clear: bool = True) -> None: ...
    @overload
    def __init__(self, sz: SizeUnion, clear: bool = True) -> None: ...
    @overload
    def __init__(self, name: str, type: BitmapType = BITMAP_TYPE_ANY, index: int = -1) -> None: ...
    @overload
    def __init__(self, name: str, mimetype: str, index: int = -1) -> None: ...
    @overload
    def __init__(self, stream: InputStream, type: BitmapType = BITMAP_TYPE_ANY, index: int = -1) -> None: ...
    @overload
    def __init__(self, width: int, height: int, data: bytes) -> None: ...
    @overload
    def __init__(self, width: int, height: int, data: bytes, alpha: bytes) -> None: ...
    @overload
    def __init__(self, sz: SizeUnion, data: bytes) -> None: ...
    @overload
    def __init__(self, sz: SizeUnion, data: bytes, alpha: bytes) -> None: ...
    def Scale(self, width: int, height: int, quality: ImageResizeQuality = IMAGE_QUALITY_NORMAL) -> Image: ...
    def SetOption(self, name: str, value: Union[int, str]) -> None: ...

StockCursor = int
CURSOR_WAIT: StockCursor
CURSOR_SIZING: StockCursor
CURSOR_SIZENS: StockCursor
CURSOR_SIZEWE: StockCursor
CURSOR_SIZENESW: StockCursor
CURSOR_SIZENWSE: StockCursor
HOURGLASS_CURSOR: StockCursor


class Cursor(GDIObject):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 cursorName: str,
                 type: BitmapType = BITMAP_TYPE_ANY,
                 hotSpotX: int = 0,
                 hotSpotY: int = 0) -> None: ...
    @overload
    def __init__(self, cursorId: StockCursor) -> None: ...
    @overload
    def __init__(self, image: Image) -> None: ...
    @overload
    def __init__(self, cursor: Cursor) -> None: ...

class BusyCursor:
    def __init__(self, cursor: Union[Cursor, StockCursor] = HOURGLASS_CURSOR) -> None: ...
    def __enter__(self) -> Cursor: ...
    def __exit__(self,
                 exc_type: Optional[Type[BaseException]],
                 exc_val: Optional[BaseException],
                 exc_tb: Optional[TracebackType]) -> None: ...

class RealPoint: ...

class Point:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, x: int, y: int) -> None: ...
    @overload
    def __init__(self, pt: RealPoint) -> None: ...
    @overload
    def __getitem__(self, idx: int) -> int: ...
    @overload
    def __getitem__(self, idx: slice) -> Sequence[int]: ...
    def __iter__(self) -> Iterator[int]: ...
    def Get(self) -> Tuple[int, int]: ...

PointUnion = Union[Tuple[int, int], Point]

class ToolTip(Object): ...

SIZE_AUTO: int
SIZE_USE_EXISTING: int
SIZE_ALLOW_MINUS_ONE: int

BackgroundStyle = int
BG_STYLE_PAINT: BackgroundStyle

class Window(EvtHandler):
    def AcceptsFocus(self) -> bool: ...
    def CaptureMouse(self) -> None: ...
    def Center(self, dir: int = BOTH) -> None: ...
    @overload
    def ClientToScreen(self, x: int, y: int) -> Tuple[int, int]: ...
    @overload
    def ClientToScreen(self, pt: PointUnion) -> Point: ...
    def Close(self, force: bool = False) -> bool: ...
    def Destroy(self) -> None: ...
    def DestroyLater(self) -> None: ...
    def Disable(self) -> bool: ...
    def Enable(self, enable: bool = True) -> None: ...
    def Fit(self) -> None: ...
    def GetBackgroundColour(self) -> Colour: ...
    def GetBestSize(self) -> Size: ...
    def GetChildren(self) -> List[Window]: ...
    def GetClientSize(self) -> Size: ...
    def GetCursor(self) -> Cursor: ...
    def GetEventHandler(self) -> EvtHandler: ...
    def GetFont(self) -> Font: ...
    def GetId(self) -> int: ...
    def GetMinSize(self) -> Size: ...
    def GetParent(self) -> Window: ...
    def GetPosition(self) -> Point: ...
    def GetRect(self) -> Rect: ...
    def GetScreenPosition(self) -> Point: ...
    def GetScrollPos(self, orientation: int) -> int: ...
    def GetSize(self) -> Size: ...
    def GetTextExtent(self, string: str) -> Size: ...
    def GetUpdateRegion(self) -> Region: ...
    def HasCapture(self) -> bool: ...
    def Hide(self) -> bool: ...
    def IsShown(self) -> bool: ...
    def Layout(self) -> bool: ...
    @overload
    def Move(self, x: int, y: int, flags: int = SIZE_USE_EXISTING) -> None: ...
    @overload
    def Move(self, pt: PointUnion, flags: int = SIZE_USE_EXISTING) -> None: ...
    def PopEventHandler(self, deleteHandler: bool = False) -> EvtHandler: ...
    @overload
    def PopupMenu(self, menu: Menu, pos: Point = DefaultPosition) -> bool: ...
    @overload
    def PopupMenu(self, menu: Menu, x: int, y: int) -> bool: ...
    def PushEventHandler(self, handler: EvtHandler) -> None: ...
    def Raise(elf) -> None: ...
    def Refresh(self, eraseBackground: bool = True, rect: Optional[RectUnion] = None) -> None: ...
    def RefreshRect(self, rect: RectUnion, eraseBackground: bool = True) -> None: ...
    def ReleaseMouse(self) -> None: ...
    @overload
    def ScreenToClient(self, x: int, y: int) -> Tuple[int, int]: ...
    @overload
    def ScreenToClient(self, pt: Point) -> Point: ...
    def SendSizeEvent(self, flags: int = 0) -> None: ...
    def SetAcceleratorTable(self, accel: AcceleratorTable) -> None: ...
    def SetAutoLayout(self, autoLayout: bool) -> None: ...
    def SetBackgroundColour(self, colour: ColourUnion) -> bool: ...
    def SetBackgroundStyle(self, style: BackgroundStyle) -> bool: ...
    @overload
    def SetClientSize(self, width: int, height: int) -> None: ...
    @overload
    def SetClientSize(self, size: SizeUnion) -> None: ...
    @overload
    def SetClientSize(self, rect: RectUnion) -> None: ...
    def SetCursor(self, cursor: Cursor) -> bool: ...
    def SetFocus(self) -> None: ...
    def SetFont(self, font: Font) -> None: ...
    def SetForegroundColour(self, colour: ColourUnion) -> bool: ...
    def SetMinSize(self, size: SizeUnion) -> None: ...
    def SetPosition(self, pt: PointUnion) -> None: ...
    def SetRect(self, rect: RectUnion) -> None: ...
    @overload
    def SetSize(self, x: int, y: int, width: int, height: int, sizeFlags: int = SIZE_AUTO) -> None: ...
    @overload
    def SetSize(self, size: SizeUnion) -> None: ...
    @overload
    def SetSize(self, rect: RectUnion) -> None: ...
    @overload
    def SetSize(self, width: int, height: int) -> None: ...
    def SetSizer(self, sizer: Sizer, deleteOld: bool = True) -> None: ...
    def SetSizerAndFit(self, sizer: Sizer, deleteOld: bool = True) -> None: ...
    @overload
    def SetToolTip(self, tipString: str) -> None: ...
    @overload
    def SetToolTip(self, tip: ToolTip) -> None: ...
    def Show(self, show: bool = True) -> bool: ...
    def Update(self) -> None: ...

class ScrollWinEvent(Event):
    def GetOrientation(self) -> int: ...

class Scrolled:
    @overload
    def CalcScrolledPosition(self, x: int, y: int) -> Point: ...
    @overload
    def CalcScrolledPosition(self, pt: PointUnion) -> Point: ...
    def GetViewStart(self) -> Tuple[int, int]: ...
    def CalcScrollInc(self, evt: ScrollWinEvent) -> int: ...
    def GetScrollPixelsPerUnit(self) -> Tuple[int, int]: ...
    def SetScrollbars(self,
                      pixelsPerUnitX: int,
                      pixelsPerUnitY: int,
                      noUnitsX: int,
                      noUnitsY: int,
                      xPos: int = 0,
                      yPos: int = 0,
                      noRefresh: bool = False) -> None: ...

ScrolledWindowStyle: int

class ScrolledWindow(Scrolled, Window):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = ScrolledWindowStyle,
                 name: str = PanelNameStr) -> None: ...

class SizerFlags: ...

class PyUserData: ...

class SizerItem(Object): ...

class Rect:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, x: int, y: int, width: int, height: int) -> None: ...
    @overload
    def __init__(self, pos: PointUnion, size: SizeUnion) -> None: ...
    @overload
    def __init__(self, size: SizeUnion) -> None: ...
    @overload
    def __init__(self, topLeft: PointUnion, bottomRight: PointUnion) -> None: ...
    def __getitem__(self, idx: int) -> int: ...
    def GetTopLeft(self) -> Point: ...
    def GetBottomRight(self) -> Point: ...
    def SetPosition(self, pos: PointUnion) -> None: ...
    def GetHeight(self) -> int: ...
    def GetWidth(self) -> int: ...
    def SetHeight(self, height: int) -> None: ...
    def SetWidth(self, width: int) -> None: ...
    @overload
    def Inflate(self, dx: int, dy: int) -> Rect: ...
    @overload
    def Inflate(self, diff: Size) -> Rect: ...
    @overload
    def Inflate(self, diff: int) -> Rect: ...
    @property
    def x(self) -> int: ...
    @property
    def y(self) -> int: ...
    @property
    def width(self) -> int: ...
    @property
    def height(self) -> int: ...
    @property
    def Size(self) -> Size: ...
    @property
    def Position(self) -> Point: ...

RectUnion = Union[Rect, Tuple[int, int, int, int]]

class Region(GDIObject):
    def GetBox(self) -> Rect: ...

BitmapType = int
BITMAP_TYPE_ANY: BitmapType
BITMAP_TYPE_PNG: BitmapType
BITMAP_SCREEN_DEPTH: int

class GDIObject(Object): ...

class Bitmap(GDIObject):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, bitmap: Bitmap) -> None: ...
    @overload
    def __init__(self, bits: bytes, width: int, height: int, depth: int) -> None: ...
    @overload
    def __init__(self, width: int, height: int, depth: int = BITMAP_SCREEN_DEPTH) -> None: ...
    @overload
    def __init__(self, sz: SizeUnion, depth: int = BITMAP_SCREEN_DEPTH) -> None: ...
    @overload
    def __init__(self, width: int, height: int, dc: DC) -> None: ...
    @overload
    def __init__(self, name: str, type: BitmapType = BITMAP_TYPE_ANY) -> None: ...
    @overload
    def __init__(self, img: Image, depth: int = BITMAP_SCREEN_DEPTH) -> None: ...
    @overload
    def __init__(self, img: Image, dc: DC) -> None: ...
    @overload
    def __init__(self, listOfBytes: list[bytes]) -> None: ...
    def GetWidth(self) -> int: ...
    def GetHeight(self) -> int: ...
    def IsOk(self) -> bool: ...

BrushStyle = int
BRUSHSTYLE_SOLID: BrushStyle
SOLID: BrushStyle
TRANSPARENT: BrushStyle

class Brush(GDIObject):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, colour: ColourUnion, style: BrushStyle = BRUSHSTYLE_SOLID) -> None: ...
    @overload
    def __init__(self, stippleBitmap: Bitmap) -> None: ...
    @overload
    def __init__(self, brush: Brush) -> None: ...
    def GetColour(self) -> Colour: ...
    @overload
    def SetColour(self, colour: Union[str, ColourUnion]) -> None: ...
    @overload
    def SetColour(self, red: int, green: int, blue: int) -> None: ...

PenStyle = int
PENSTYLE_SOLID: PenStyle
LONG_DASH: PenStyle

class PenInfo: ...

class Pen(GDIObject):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, info: PenInfo) -> None: ...
    @overload
    def __init__(self, colour: ColourUnion, width: int = 1, style: PenStyle = PENSTYLE_SOLID) -> None: ...
    @overload
    def __init__(self, pen: Pen) -> None: ...

DefaultCoord: int

DefaultPosition: Point

DefaultSize: Size

class Sizer(Object):
    @overload
    def Add(self, window: Window, flags: SizerFlags) -> None: ...
    @overload
    def Add(self, window: Window, proportion: int = 0, flag: int = 0, border: int = 0, userData: Optional[PyUserData] = None) -> None: ...
    @overload
    def Add(self, sizer: Sizer, flags: SizerFlags) -> None: ...
    @overload
    def Add(self, sizer: Sizer, proportion: int = 0, flag: int = 0, border: int = 0, userData: Optional[PyUserData] = None) -> None: ...
    @overload
    def Add(self, width: int, height: int, proportion: int = 0, flag: int = 0, border: int = 0, userData: Optional[PyUserData] = None) -> None: ...
    @overload
    def Add(self, width: int, height: int, flags: SizerFlags) -> None: ...
    @overload
    def Add(self, item: SizerItem) -> None: ...
    @overload
    def Add(self,
            size: SizeUnion,
            proportion: int = 0,
            flag: int = 0,
            border: int = 0,
            userData: Optional[PyUserData] = None) -> None: ...
    @overload
    def Add(self, size: SizeUnion, flags: SizerFlags) -> None: ...
    def SetSizeHints(self, window: Window) -> None: ...
    def Fit(self, window: Window) -> Size: ...
    @overload
    def Hide(self, window: Window, recursive: bool = False) -> bool: ...
    @overload
    def Hide(self, sizer: Sizer, recursive: bool = False) -> bool: ...
    @overload
    def Hide(self, index: int) -> bool: ...
    @overload
    def Show(self, window: Window, show: bool = True, recursive: bool = False) -> bool: ...
    @overload
    def Show(self, sizer: Sizer, show: bool = True, recursive: bool = False) -> bool: ...
    @overload
    def Show(self, index: int, show: bool = True) -> bool: ...
    @overload
    def Detach(self, window: Window) -> bool: ...
    @overload
    def Detach(self, sizer: Sizer) -> bool: ...
    @overload
    def Detach(self, index: int) -> bool: ...
    @overload
    def Insert(self, index: int, window: Window, flags: SizerFlags) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               window: Window,
               proportion: int = 0,
               flag: int = 0,
               border: int = 0,
               userData: Optional[PyUserData] = None) -> SizerItem: ...
    @overload
    def Insert(self, index: int, sizer: Sizer, flags: SizerFlags) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               sizer: Sizer,
               proportion: int = 0,
               flag: int = 0,
               border: int = 0,
               userData: Optional[PyUserData] = None) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               width: int,
               height: int,
               proportion: int = 0,
               flag: int = 0,
               border: int = 0,
               userData: Optional[PyUserData] = None) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               width: int,
               height: int,
               flags: SizerFlags) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               item: SizerItem) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               size: Size,
               proportion: int = 0,
               flag: int = 0,
               border: int = 0,
               userData: Optional[PyUserData] = None) -> SizerItem: ...
    @overload
    def Insert(self,
               index: int,
               size: Size,
               flags: SizerFlags) -> SizerItem: ...
    @overload
    def SetMinSize(self, size: SizeUnion) -> None: ...
    @overload
    def SetMinSize(self, width: int, height: int) -> None: ...
    @overload
    def GetItem(self, window: Window, recursive: bool = False) -> SizerItem: ...
    @overload
    def GetItem(self, sizer: Sizer, recursive: bool = False) -> SizerItem: ...
    @overload
    def GetItem(self, index: int) -> SizerItem: ...

class BoxSizer(Sizer):
    def __init__(self, orient: int = HORIZONTAL) -> None: ...

class StaticBoxSizer(Sizer):
    @overload
    def __init__(self,
                 box: StaticBox,
                 orient: int = HORIZONTAL) -> None: ...
    @overload
    def __init__(self,
                 orient: int,
                 parent: Window,
                 label: str = '') -> None: ...

class GridSizer(Sizer):
    ...

class FlexGridSizer(GridSizer):
    @overload
    def __init__(self, cols: int, vgap: int, hgap: int) -> None: ...
    @overload
    def __init__(self, cols: int, gap: SizeUnion = Size(0, 0)) -> None: ...
    @overload
    def __init__(self, rows: int, cols: int, vgap: int, hgap: int) -> None: ...
    @overload
    def __init__(self, rows: int, cols: int, gap: SizeUnion = Size(0, 0)) -> None: ...
    def AddGrowableCol(self, idx: int, proportion: int = 0) -> None: ...
    def AddGrowableRow(self, idx: int, proportion: int = 0) -> None: ...

class NonOwnedWindow(Window): ...

class PopupWindow(NonOwnedWindow):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, parent: Window, flags: int = BORDER_NONE) -> None: ...

class TopLevelWindow(NonOwnedWindow):
    def Iconize(self, iconize: bool = True) -> None: ...
    def SetTitle(self, title: str) -> None: ...

PanelNameStr: str

class Panel(Window):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = TAB_TRAVERSAL,
                 name: str = PanelNameStr) -> None: ...

ACCEL_ALT: int
ACCEL_CTRL: int
ACCEL_NORMAL: int
ACCEL_SHIFT: int

class MenuItem(Object):
    def Enable(self, enable: bool = True) -> None: ...
    def GetId(self) -> int: ...
    def Check(self, check: bool = True) -> None: ...
    def IsChecked(self) -> bool: ...
    def SetItemLabel(self, label: str) -> None: ...

ItemKind = int
ITEM_CHECK: ItemKind
ITEM_NORMAL: ItemKind
ITEM_RADIO: ItemKind

class Menu(EvtHandler):
    @overload
    def Append(self, id: int, item: str = '', helpString: str = '', kind: ItemKind = ITEM_NORMAL) -> MenuItem: ...
    @overload
    def Append(self, menuItem: MenuItem) -> MenuItem: ...
    def AppendSeparator(self) -> MenuItem: ...
    def AppendSubMenu(self, submenu: Menu, text: str, help: str = '') -> MenuItem: ...
    def Check(self, id: int, check: bool) -> None: ...
    def IsChecked(self, id: int) -> bool: ...
    def GetMenuItems(self) -> List[MenuItem]: ...

class MenuBar(Window):
    def Append(self, menu: Menu, title: str) -> None: ...

StatusBarNameStr: str
STB_DEFAULT_STYLE: int

class StatusBar(Control): ...

FrameNameStr: str

TB_FLAT: int
TB_HORIZONTAL: int

class ToolBarToolBase(Object):
    def GetId(self) -> int: ...

class ToolBar(Control):
    def AddControl(self, control: Control, label: str = '') -> ToolBarToolBase: ...
    def AddSeparator(self) -> ToolBarToolBase: ...
    @overload
    def AddTool(self, tool: ToolBarToolBase) -> ToolBarToolBase: ...
    @overload
    def AddTool(self,
                toolid: int,
                label: str,
                bitmap: Union[Bitmap, BitmapBundle],
                shortHelp: str = '',
                kind: ItemKind = ITEM_NORMAL) -> ToolBarToolBase: ...
    @overload
    def AddTool(self,
                toolid: int,
                label: str,
                bitmap: Union[Bitmap, BitmapBundle],
                bmpDisabled: Union[Bitmap, BitmapBundle],
                kind: ItemKind = ITEM_NORMAL,
                shortHelp: str = '',
                longHelp: str = '',
                clientData: Any = None) -> ToolBarToolBase: ...
    def EnableTool(self,
                   toolId: int,
                   enable: bool) -> None: ...
    def Realize(self) -> bool: ...

class Frame(TopLevelWindow):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Optional[Window],
                 id: int = ID_ANY,
                 title: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = DEFAULT_DIALOG_STYLE,
                 name: str = FrameNameStr) -> None: ...
    def SetMenuBar(self, menuBar: MenuBar) -> None: ...
    def CreateStatusBar(self, number: int = 1, style: int = STB_DEFAULT_STYLE, id: int = 0, name: str = StatusBarNameStr) -> None: ...
    def GetStatusBar(self) -> StatusBar: ...
    def SetStatusText(self, text: str, number: int = 0) -> None: ...
    def SetToolBar(self, toolBar: ToolBar) -> None: ...

DialogNameStr: str

class Dialog(TopLevelWindow):
    def __enter__(self) -> Dialog: ...
    def __exit__(self,
                 exc_type: Optional[Type[BaseException]],
                 exc_val: Optional[BaseException],
                 exc_tb: Optional[TracebackType]) -> None: ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Optional[Window],
                 id: int = ID_ANY,
                 title: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = DEFAULT_DIALOG_STYLE,
                 name: str = DialogNameStr) -> None: ...
    def CreateButtonSizer(self, flags: int) -> Sizer: ...
    def GetReturnCode(self) -> int: ...
    def EndModal(self, retCode: int) -> None: ...
    def ShowModal(self) -> int: ...
    def ShowWindowModal(self) -> None: ...
    def Centre(self, direction: int = BOTH) -> None: ...

CHOICEDLG_STYLE: int

class SingleChoiceDialog(Dialog):
    def __init__(self,
                 parent: Optional[Window],
                 message: str,
                 caption: str,
                 choices: List[str],
                 style: int = CHOICEDLG_STYLE,
                 pos: PointUnion = DefaultPosition) -> None: ...
    def GetStringSelection(self) -> str: ...

FileSelectorPromptStr: str
FileSelectorDefaultWildcardStr: str
FileDialogNameStr: str

FD_DEFAULT_STYLE: int
FD_OPEN: int
FD_CHANGE_DIR: int
FD_SAVE: int
FD_OVERWRITE_PROMPT: int

class FileDialog(Dialog):
    def __init__(self,
                 parent: Window,
                 message: str = FileSelectorPromptStr,
                 defaultDir: str = '',
                 defaultFile: str = '',
                 wildcard: str = FileSelectorDefaultWildcardStr,
                 style: int = FD_DEFAULT_STYLE,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 name: str = FileDialogNameStr) -> None: ...
    def ShowModal(self) -> int: ...
    def GetPath(self) -> str: ...
    def GetFilename(self) -> str: ...

class GenericProgressDialog(Dialog): ...

PD_APP_MODAL: int
PD_AUTO_HIDE: int
PD_CAN_ABORT: int
PD_REMAINING_TIME: int

class ProgressDialog(GenericProgressDialog):
    def __init__(self,
                 title: str,
                 message: str,
                 maximum: int = 100,
                 parent: Optional[Window] = None,
                 style: int = PD_APP_MODAL | PD_AUTO_HIDE) -> None: ...
    def Update(self, value: int, newmsg: str = '') -> Tuple[bool, bool]: ...  # type: ignore[override]

class MessageDialog(Dialog):
    def __init__(self,
                 parent: Window,
                 message: str,
                 caption: str = MessageBoxCaptionStr,
                 style: int = OK | CENTRE,
                 pos: PointUnion = DefaultPosition) -> None: ...

ControlNameStr: str

class Control(Window):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = ControlNameStr) -> None: ...
    @overload
    def GetSizeFromTextSize(self, xlen: int, ylen: int = -1) -> Size: ...
    @overload
    def GetSizeFromTextSize(self, tsize: SizeUnion) -> Size: ...
    def SetLabel(self, label: str) -> None: ...

StaticTextNameStr: str

class StaticText(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 label: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 name: str = StaticTextNameStr) -> None: ...
    def Wrap(self, width: int) -> None: ...

class SpinEvent(NotifyEvent): ...

class SpinCtrl(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 value: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 min: int = 0,
                 max: int = 100,
                 initial: int = 0,
                 name: str = 'wxSpinCtrl') -> None: ...
    def GetValue(self) -> int: ...
    @overload
    def SetValue(self, text: str) -> None: ...
    @overload
    def SetValue(self, value: int) -> None: ...
    def SetRange(self, minVal: int, maxVal: int) -> None: ...

class Validator(EvtHandler): ...

DefaultValidator: Validator

ClientData = int

class ItemContainerImmutable:
    def SetStringSelection(self, string: str) -> bool: ...
    def GetStringSelection(self) -> str: ...

class ItemContainer(ItemContainerImmutable):
    @overload
    def Append(self, item: str) -> None: ...
    @overload
    def Append(self, item: str, clientData: ClientData) -> None: ...
    @overload
    def Append(self, items: List[str]) -> None: ...
    def AppendItems(self, items: List[str]) -> None: ...
    def Clear(self) -> None: ...
    def GetItems(self) -> List[str]: ...

CB_DROPDOWN: int
CB_READONLY: int
TE_LEFT: int
TE_PROCESS_ENTER: int
TE_READONLY: int

class TextEntry:
    def GetValue(self) -> str: ...
    def SetValue(self, value: str) -> None: ...
    def SetEditable(self, editable: bool) -> None: ...
    def Clear(self) -> None: ...

ComboBoxNameStr: str

class ComboBox(Control, ItemContainer, TextEntry):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 value: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 choices: List[str] = [],
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = ComboBoxNameStr) -> None: ...
    def GetValue(self) -> str: ...
    def SetValue(self, text: str) -> None: ...
    @overload
    def SetSelection(self, from_: int, to_: int) -> None: ...
    @overload
    def SetSelection(self, n: int) -> None: ...
    def GetSelection(self) -> int: ...
    def GetCurrentSelection(self) -> int: ...

class ComboCtrl(Control, TextEntry):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 value: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = ComboBoxNameStr) -> None: ...
    def SetPopupControl(self, popup: ComboPopup) -> None: ...
    def SetPopupMinWidth(self, width: int) -> None: ...
    def SetText(self, value: str) -> None: ...
    def GetTextCtrl(self) -> TextCtrl: ...
    def GetPopupWindow(self) -> Window: ...

TextCtrlNameStr: str

class TextCtrl(Control, TextEntry):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 value: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = TextCtrlNameStr) -> None: ...

class AnyButton(Control): ...

ButtonNameStr: str

class Button(AnyButton):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 label: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = ButtonNameStr) -> None: ...
    def GetLabel(self) -> str: ...

StaticBoxNameStr: str

class StaticBox(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 label: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 name: str = StaticBoxNameStr) -> None: ...

ListCtrlNameStr: str
LC_ICON: int
LC_REPORT: int
LC_SORT_ASCENDING: int

LIST_FORMAT_LEFT: int
LIST_AUTOSIZE: int

class ListItem(Object): ...

class ListEvent(NotifyEvent):
    def GetIndex(self) -> int: ...

class ListCtrl(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = LC_ICON,
                 validator: Validator = DefaultValidator,
                 name: str = ListCtrlNameStr) -> None: ...
    def ClearAll(self) -> None: ...
    @overload
    def InsertColumn(self, col: int, info: ListItem) -> int: ...
    @overload
    def InsertColumn(self, col: int, heading: str, format: int = LIST_FORMAT_LEFT, width: int = LIST_AUTOSIZE) -> int: ...
    def SetColumnWidth(self, col: int, width: int) -> bool: ...
    def SetItem(self, index: int, column: int, label: str, imageId: int = -1) -> bool: ...
    def SetItemBackgroundColour(self, item: int, col: ColourUnion) -> None: ...
    @overload
    def InsertItem(self, info: ListItem) -> int: ...
    @overload
    def InsertItem(self, index: int, label: str) -> int: ...
    @overload
    def InsertItem(self, index: int, imageIndex: int) -> int: ...
    @overload
    def InsertItem(self, index: int, label: str, imageIndex: int) -> int: ...
    def DeleteItem(self, item: int) -> bool: ...

RadioButtonNameStr: str

class RadioButton(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 label: str = '',
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = LC_ICON,
                 validator: Validator = DefaultValidator,
                 name: str = RadioButtonNameStr) -> None: ...
    def GetValue(self) -> bool: ...


class BitmapBundle: ...

NullBitmap: BitmapBundle

StaticBitmapNameStr: str

class StaticBitmap(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 bitmap: Union[Bitmap, BitmapBundle] = NullBitmap,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = 0,
                 name: str = StaticBitmapNameStr) -> None: ...

CheckBoxNameStr: str

class CheckBox(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 label: str = '',
                 pos: Point = DefaultPosition,
                 size: Size = DefaultSize,
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = CheckBoxNameStr) -> None: ...
    def SetValue(self, state: bool) -> None: ...
    def GetValue(self) -> bool: ...

ChoiceNameStr: str

class Choice(Control, ItemContainer):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 choices: List[str] = [],
                 style: int = 0,
                 validator: Validator = DefaultValidator,
                 name: str = ChoiceNameStr) -> None: ...
    def GetCurrentSelection(self) -> int: ...
    def GetString(self, n: int) -> str: ...
    def SetSelection(self, n: int) -> None: ...

StaticLineNameStr: str

class StaticLine(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: Point = DefaultPosition,
                 size: Size = DefaultSize,
                 style: int = 0,
                 name: str = StaticLineNameStr) -> None: ...

class ComboPopup:
    def __init__(self) -> None: ...
    def GetControl(self) -> Window: ...
    def GetComboCtrl(self) -> ComboCtrl: ...
    def Dismiss(self) -> None: ...

SliderNameStr: str
SL_HORIZONTAL: int

class Slider(Control):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 value: int = 0,
                 minValue: int = 0,
                 maxValue: int = 100,
                 pos: Point = DefaultPosition,
                 size: Size = DefaultSize,
                 style: int = SL_HORIZONTAL,
                 validator: Validator = DefaultValidator,
                 name: str = SliderNameStr) -> None: ...
    def SetRange(self, minValue: int, maxValue: int) -> None: ...
    def GetValue(self) -> int: ...
    def SetValue(self, value: int) -> None: ...

class TreeItemId:
    def IsOk(self) -> bool: ...

class WithImages: ...

TreeCtrlNameStr: str

TR_DEFAULT_STYLE: int
TR_HIDE_ROOT: int
TR_HAS_BUTTONS: int
TR_SINGLE: int
TR_FULL_ROW_HIGHLIGHT: int
TR_MULTIPLE: int

class TreeEvent(NotifyEvent):
    def GetKeyEvent(self) -> KeyEvent: ...
    def GetItem(self) -> TreeItemId: ...

class TreeCtrl(Control, WithImages):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self,
                 parent: Window,
                 id: int = ID_ANY,
                 pos: PointUnion = DefaultPosition,
                 size: SizeUnion = DefaultSize,
                 style: int = TR_DEFAULT_STYLE,
                 validator: Validator = DefaultValidator,
                 name: str = TreeCtrlNameStr) -> None: ...
    def DeleteChildren(self, item: TreeItemId) -> None: ...
    def AppendItem(self,
                   parent: TreeItemId,
                   text: str,
                   image: int = -1,
                   selImage: int = -1,
                   data: Optional[Any] = None) -> TreeItemId: ...
    def SetItemHasChildren(self, item: TreeItemId, hasChildren: bool = True) -> None: ...
    def SetQuickBestSize(self, quickBestSize: bool) -> None: ...
    def AddRoot(self,
                text: str,
                image: int = -1,
                selImage: int = -1,
                data: Optional[Any] = None) -> TreeItemId: ...
    def GetItemText(self, item: TreeItemId) -> str: ...
    def GetSelection(self) -> TreeItemId: ...
    def Expand(self, item: TreeItemId) -> None: ...
    def SelectItem(self, item: TreeItemId, select: bool = True) -> None: ...

RasterOperationMode = int
COPY: RasterOperationMode

class DC(Object):
    def GetTextExtent(self, st: str) -> Size: ...
    def SetPen(self, pen: Pen) -> None: ...
    def SetBrush(self, brush: Brush) -> None: ...
    def GetBackground(self) -> Brush: ...
    def SetBackground(self, brush: Brush) -> None: ...
    def SetBackgroundMode(self, mode: int) -> None: ...
    @overload
    def DrawBitmap(self, bitmap: Bitmap, x: int, y: int, useMask: bool = False) -> None: ...
    @overload
    def DrawBitmap(self, bmp: Bitmap, pt: PointUnion, useMask: bool = False) -> None: ...
    @overload
    def DrawLine(self, x1: int, y1: int, x2: int, y2: int) -> None: ...
    @overload
    def DrawLine(self, pt1: PointUnion, pt2: PointUnion) -> None: ...
    @overload
    def DrawRectangle(self, x: int, y: int, width: int, height: int) -> None: ...
    @overload
    def DrawRectangle(self, pt: PointUnion, sz: SizeUnion) -> None: ...
    @overload
    def DrawRectangle(self, rect: Rect) -> None: ...
    @overload
    def DrawText(self, text: str, x: int, y: int) -> None: ...
    @overload
    def DrawText(self, text: str, pt: PointUnion) -> None: ...
    def DrawTextList(self,
                     textList: List[str],
                     coords: List[PointUnion],
                     foregrounds: Optional[Union[ColourUnion, List[ColourUnion]]] = None,
                     backgrounds: Optional[Union[ColourUnion, List[ColourUnion]]] = None) -> None: ...
    @overload
    def SetClippingRegion(self, x: int, y: int, width: int, height: int) -> None: ...
    @overload
    def SetClippingRegion(self, pt: PointUnion, sz: SizeUnion) -> None: ...
    @overload
    def SetClippingRegion(self, rect: Rect) -> None: ...
    def DestroyClippingRegion(self) -> None: ...
    def GetFont(self) -> Font: ...
    def SetFont(self, font: Font) -> None: ...
    def SetLogicalScale(self, x: float, y: float) -> None: ...
    def GetSize(self) -> Size: ...
    def Clear(self) -> None: ...
    def Blit(self,
             xdest: int,
             ydest: int,
             width: int,
             height: int,
             source: DC,
             xsrc: int,
             ysrc: int,
             logicalFunc: RasterOperationMode = COPY,
             useMask: bool = False,
             xsrcMask: int = DefaultCoord,
             ysrcMask: int = DefaultCoord) -> bool: ...
    def StretchBlit(self,
                    xdest: int,
                    ydest: int,
                    dstWidth: int,
                    dstHeight: int,
                    source: DC,
                    xsrc: int,
                    ysrc: int,
                    srcWidth: int,
                    srcHeight: int,
                    logicalFunc: RasterOperationMode = COPY,
                    useMask: bool = False,
                    xsrcMask: int = DefaultCoord,
                    ysrcMask: int = DefaultCoord) -> bool: ...

class MemoryDC(DC):
    def SelectObject(self, bitmap: Bitmap) -> None: ...

class WindowDC(DC): ...

class PrinterDC(DC): ...

class GraphicsObject(Object): ...

class GraphicsContext(GraphicsObject):
    @overload
    @staticmethod
    def Create(window: Window) -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create(windowDC: WindowDC) -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create(memoryDC: MemoryDC) -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create(printerDC: PrinterDC) -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create(image: Image) -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create() -> GraphicsContext: ...
    @overload
    @staticmethod
    def Create(autoPaintDC: AutoBufferedPaintDC) -> GraphicsContext: ...

class GCDC(DC):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, windowDC: WindowDC) -> None: ...
    @overload
    def __init__(self, memoryDC: MemoryDC) -> None: ...
    @overload
    def __init__(self, printerDC: PrinterDC) -> None: ...
    @overload
    def __init__(self, context: GraphicsContext) -> None: ...

class BufferedDC(MemoryDC): ...
class BufferedPaintDC(BufferedDC): ...
class AutoBufferedPaintDC(BufferedPaintDC):
    def __init__(self, window: Window) -> None: ...

FontFamily = int
FONTFAMILY_MODERN: FontFamily
SWISS: FontFamily

FontStyle = int
NORMAL: FontStyle

FontWeight = int
FONTWEIGHT_BOLD: FontWeight
BOLD: FontWeight

FontEncoding = int
FONTENCODING_DEFAULT: FontEncoding

class FontInfo: ...

class NativeFontInfo: ...

class Font(GDIObject):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, font: Font) -> None: ...
    @overload
    def __init__(self, fontInfo: FontInfo) -> None: ...
    @overload
    def __init__(self,
                 pointSize: int,
                 family: FontFamily,
                 style: FontStyle,
                 weight: FontWeight,
                 underline: bool = False,
                 faceName: str = '',
                 encoding: FontEncoding = FONTENCODING_DEFAULT) -> None: ...
    @overload
    def __init__(self,
                 pixelSize: SizeUnion,
                 family: FontFamily,
                 style: FontStyle,
                 weight: FontWeight,
                 underline: bool = False,
                 faceName: str = '',
                 encoding: FontEncoding = FONTENCODING_DEFAULT) -> None: ...
    @overload
    def __init__(self, nativeInfoString: str) -> None: ...
    @overload
    def __init__(self, nativeInfo: NativeFontInfo) -> None: ...
    def SetWeight(self, weight: FontWeight) -> None: ...
    def GetPixelSize(self) -> Size: ...
    def GetPointSize(self) -> int: ...
    def Underlined(self) -> Font: ...

class FontEnumerator:
    @staticmethod
    def IsValidFacename(facename: str) -> bool: ...

ArtID = int
ART_NEW: ArtID
ART_CLOSE: ArtID
ART_COPY: ArtID
ART_DELETE: ArtID
ART_FILE_SAVE: ArtID
ART_FILE_SAVE_AS: ArtID
ART_FILE_OPEN: ArtID
ART_GO_BACK: ArtID
ART_GO_DOWN: ArtID
ART_GO_FORWARD: ArtID
ART_GO_UP: ArtID
ART_MINUS: ArtID
ART_PLUS: ArtID
ART_REDO: ArtID
ART_TOOLBAR: ArtID
ART_UNDO: ArtID
ART_WARNING: ArtID

ArtClient = int
ART_MESSAGE_BOX: ArtClient
ART_OTHER: ArtClient

class ArtProvider(Object):
    @staticmethod
    def GetBitmap(id: ArtID, client: ArtClient = ART_OTHER, size: SizeUnion = DefaultSize) -> Bitmap: ...

class DataObject: ...
class DataObjectSimple(DataObject): ...
class TextDataObject(DataObjectSimple):
    def SetText(self, strText: str) -> None: ...

class Clipboard(Object):
    def Open(self) -> bool: ...
    def SetData(self, data: DataObject) -> bool: ...
    def IsOpened(self) -> bool: ...
    def Close(self) -> None: ...

TheClipboard: Clipboard

class AcceleratorEntry: ...

class AcceleratorTable(Object):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, entries: Sequence[Union[AcceleratorEntry, Tuple[int, int, int]]]) -> None: ...

NullAcceleratorTable: AcceleratorTable

class Display:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, index: int) -> None: ...
    @overload
    def __init__(self, window: Window) -> None: ...
    @staticmethod
    def GetCount() -> int: ...
    def IsPrimary(self) -> bool: ...
    @property
    def Geometry(self) -> Rect: ...
    def GetPPI(self) -> Size: ...

def GetDisplayPPI() -> Size: ...

OS_MAC_OS: int
OS_MAC_OSX_DARWIN: int
OS_MAC: int
def GetOsVersion(micro: Optional[int] = None) -> Tuple[int, int, int]: ...
def GetMousePosition() -> Point: ...
def SetCursor(cursor: Cursor) -> None: ...
def BeginBusyCursor(cursor: Union[StockCursor, Cursor] = HOURGLASS_CURSOR) -> None: ...
def IsBusy() -> bool: ...
def EndBusyCursor() -> None: ...
def SafeYield(win: Optional[Window] = None, onlyIfNeeded: bool = False) -> bool: ...
def ImageFromBitmap(bitmap: Bitmap) -> Image: ...
def BitmapFromImage(image: Image) -> Bitmap: ...
def PostEvent(dest: EvtHandler, event: Union[PyCommandEvent, Event]) -> None: ...
def CallAfter(callableObj: Callable, *args: Any, **kwargs: Any) -> None: ...

MessageBoxCaptionStr: str
def MessageBox(message: str,
               caption: str = MessageBoxCaptionStr,
               style: int = OK | CENTRE,
               parent: Optional[Window] = None,
               x: int = DefaultCoord,
               y: int = DefaultCoord) -> int: ...

class PyDeadObjectError(Exception): ...
